package org.brisling.repository.inf;

import java.io.Serializable;
import java.util.List;

import org.brisling.domain.sysman.Department;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;


/**
 * 根据部门查找相应的数据仓库接口
 * @author wang
 * @Date   : 2015年6月8日 下午7:50:08
 * @version: 1.0
 * @param <T> 业务实体对象
 * @param <ID>业务实体唯一编码
 */
@NoRepositoryBean
public interface ListByDeptRepository<T,ID extends Serializable> extends ListByUpLinkRepository<T, ID> {

	/**
	 * 根据部门信息查找业务实体 对象
	 * @param dept 部门实体对象
	 * @param page 分页参数
	 * @return <code>List</code> 类定义中泛型业务实体对象集合
	 * @see Department 
	 */
	List<T> findByDept(Department dept,Pageable page);
	
	/**
	 * 根据部门信息查找业务实体 对象
	 * @param dept 部门实体对象
	 * @param sort 排序对象
	 * @return <code>List</code> 类定义中泛型业务实体对象集合
	 * @see Department
	 */
	List<T> findByDept(Department dept,Sort sort);
	
	/**
	 * 根据部门信息集合查找业务实体 对象
	 * @param dept	部门实体对象集合
	 * @param page 分页参数
	 * @return <code>List</code> 类定义中泛型业务实体对象集合
	 */
	List<T> findByDept(List<Department> dept,Pageable page);
	
	/**
	 * 根据部门唯一编码查找业务实体 对象 
	 * @param deptid 部门实体对象唯一编码
	 * @param page 分页参数
	 * @return <code>List</code> 类定义中泛型业务实体对象集合
	 */
	List<T> findByDeptid(Long deptid,Pageable page);
	
	/**
	 * 根据部门唯一编码查找业务实体 对象 
	 * @param deptid 部门实体对象唯一编码
	 * @param sort 排序参数
	 * @return <code>List</code> 类定义中泛型业务实体对象集合
	 */
	List<T> findByDeptid(Long deptid,Sort sort);
	
	
	
	/**
	 * 根据部门编码统计业务实体对象数量
	 * @param deptid 部门实体对象唯一编码
	 * @return <code>Long</code> 实体对象数量
	 */
	Long countByDeptid(Long deptid);
	
	/**
	 * 根据部门信息集合查找业务实体 对象
	 * @param deptid	部门实体对象唯一编码
	 * @param page 分页参数
	 * @return <code>List</code> 类定义中泛型业务实体对象集合
	 */
	List<T> findByDeptid(List<Long> deptid,Pageable page);
}
